package test;

import java.io.File;
import java.io.PrintWriter;
import java.io.FileWriter;

import static test.Test.*;

/**
* A teszteléshez tartozó kimenetet előállító osztály
**/

public class Output {

	// Az aktuális szintnek megfelelő tabulátorok száma
	private static int tabs=0;
	
	// Kiementi fájl elérési útja/neve
	private static String outputFileName="output.txt";
	
	//Kimeneti fájl
	private static File outputFile = new File(outputFileName);
	
	//Kimeneti fájl Stream
	private static PrintWriter output;
	
	
	//A kimeneti fájl tartalmának törlése és inicializálása
	public static void clear(){
		try {
			output = new PrintWriter(new FileWriter(outputFile,false));
			output.println("A következö tesztesetek futottak le:");
			output.close();
		} catch (Exception e) {

		}
	}
	
	//Arra szolgál, hogy a fájlba is ki tudjuk írni, hogy melyik teszteset következik
	public static void writeTest(String text){
		try {
			output = new PrintWriter(new FileWriter(outputFile,true));
			output.println();
			output.println(text);
			output.println();
			output.close();
		} catch (Exception e) {

		}
	}
	
	
	//CALL kiírásasa konzolra és fájlba
	public static void call(int id, String name, String method) {	
		if(logEnabled) {
			try {
				output = new PrintWriter(new FileWriter(outputFile,true));	//Fájlhoz hozzáfűzünk, nem írjuk felül a tartalmát
			
				//Sor megfelelő mértékű behúzását oldja meg 
				for (int i=0; i<tabs; i++){
					System.out.print("   ");
					output.write("   ");
				}
			
				System.out.println("CALL|" + id + ":" + name + "|" + method);		//Megfelelő szöveg konzolra írása
				output.println("CALL|" + id + ":" + name + "|" + method);			//Megfelelő szöveg fájlba írása
			
				output.close();		//Fájl lezárás
			
				tabs++;		//hierarchia következő foka => behúzás mértéke (azaz tabok száma) nő
			} catch (Exception e) {
		
			}	
		}
	}
	
	
	//CREATE kiírása konzolra és fájlba
	public static void create (int id, String name) {
		if(logEnabled) {
			try{
				output = new PrintWriter(new FileWriter(outputFile,true));	//Fájlhoz hozzáfűzünk, nem írjuk felül a tartalmát
			
				//Sor megfelelő mértékű behúzását oldja meg
				for (int i=0; i<tabs; i++){
					System.out.print("   ");
					output.write("   ");
				}
			
				System.out.println("CREATE|" + id + ":" + name);			//Megfelelő szöveg konzolra írása
				output.println("CREATE|" + id + ":" + name);				//Megfelelő szöveg fájlba írása
			
				output.close();		//Fájl lezárás
			}catch(Exception e){
				
			}
		}
	}
	
	
	//RETURN kiírása konzolra és fájlba
	public static void ret (int id, String name, String val) {	
		if(logEnabled) {
			tabs--;	//Visszatérünk => hierarchia felsőbb fokára lépünk => behúzás mértéke (azaz tabok száma) csökken
			try{
				output = new PrintWriter(new FileWriter(outputFile,true));	//Fájlhoz hozzáfűzünk, nem írjuk felül a tartalmát
			
				//Sor megfelelő mértékű behúzását oldaj meg
				for (int i=0; i<tabs; i++){
					System.out.print("   ");
					output.write("   ");
				}
			
				System.out.println("RETURN|" + id + ":" + name + "|" + val);	//Megfelelő szöveg konzolra írása
				output.println("RETURN|" + id + ":" + name + "|" + val);		//Megfelelő szöveg fájlba írása
			
				output.close();		//Fájl lezárás
			}catch(Exception e){
				
			}
		}
	}
}